function func1() {
	console.log(a);
}

function func2() {
	var a = 3;
	func1();
}

var a = 2;

func2(); // 输出结果 2

/**
 * 分析：
 * 从表面上看，运行代码执行逻辑：
 * 1、执行func2,然后里面执行func1。
 * 2、func1中会对a进行查找，在func1中没找到，那么此时他是有func2中执行的
 * 3、然后逐个网上，这个会在func2中查找，此时找到了 a=3;结果就是a=3.
 *
 * 然而实际：
 * 结果却是不是这样的。在这里就得出结论，js没有动态作用域。只有词法作用域。
 * 词法作用域是在代码编写的时候就已经定下来了的。并不会因为他在哪里调用而改变。
 * 上面代码：
 * 1、执行func2,然后里面执行func1。
 * 2、func1中会对a进行查找，在func1中没找到，那么此时他是有func2中执行的
 * 3、这里不同于前面的思考步骤，是因为不会再func2中进行查找，他按照词法作用域查找，而这里他的词法作用域
 * 先是func1，然后就是全局。因此，在func1中没找到，在这里，就会往上在全局作用域中找，找到a=2。
 */